import axios from 'axios'
import { showLoadingToast } from 'vant'
import { showNotify } from 'vant'
import qs from 'qs'

export const ajax = axios.create({
  // 携带cookie
  withCredentials: true,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  // 修改在发送请求之前请求体的数据
  transformRequest: function (data, headers) {
    return qs.stringify(data)
  }
})

// 请求钩子
ajax.interceptors.request.use(
  function (config) {
    // console.log('request hook...')

    // 加载动画
    showLoadingToast({
      message: '加载中...',
      forbidClick: true,
      loadingType: 'spinner'
    })
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 响应钩子
ajax.interceptors.response.use(
  function (config) {
    // console.log('response hook...')
    return config
  },
  function (error) {
    // if (error.response.status == 401) {
    //   showNotify({ message: '您还未登录，跳转到登录页面', type: 'danger' })
    // }
    if (error.response.status == 500) {
      showNotify({ message: '服务器正忙，请稍后重试' })
    }

    if (error.response.status == 400) {
      const data = error.response.data
      if (data.error_list) {
        // error_list是对象，取出它的键__all__，里面的值是数组，数组的每个值也是对象
        /**   格式
         * error_list = {
         *  __all__ : [
         *    //第一条错误信息
         *    {}，
         *    ...
         *  ]
         * }
         */
        const keys = Object.keys(data.error_list)
        const errObj = data.error_list[keys[0]][0]
        showNotify({ message: errObj.message })
      }
    }
    console.log('error:', error)
    return Promise.reject(error)
  }
)
